ListView 是最適合用來顯示重複數據的一種元件,ListView 他不會一次把所有數據顯示出來,而是有在螢幕上的資料他才會顯示出來,所以在效能上會比較好。
ListView 有兩個必須的 props dataSource和renderRow。dataSource是列表的數據,而 renderRow 則是要顯示時會把需要的數據傳下去讓 dump Component 來顯示。
使用 SOP: import { ListView } from react-native;
使用範例
<ListView
dataSource={dataSource}
renderRow={(rowData) => <ButtonSample buttonText={rowData} />}
/>
dataSource 就是這個 List 預計要顯示的全部資料
renderRow 就是每個 ListItem 要長怎樣,可以想像成他是一個 for 迴圈遍歷整個 array 然後把值塞進去 dump Component 之中作為顯示。
完整範例
import React, { Component } from 'react';
import {
StyleSheet,
View,
ListView,
} from 'react-native';
import ButtonSample from './ButtonSample';
export default (props) => {
const ds = new ListView.DataSource({rowHasChanged: (r1, r2) => r1 !== r2});
const dataSource = ds.cloneWithRows([
'Button1', 'Button2', 'Button3', 'Button4'
]);
return (
<View style={styles.center}>
<ListView
dataSource={dataSource}
renderRow={(rowData) => <ButtonSample buttonText={rowData} />}
/>
</View>
);
}
const styles = StyleSheet.create({
center: {
flex: 1,
justifyContent: 'center',
alignItems: 'center',
paddingTop: 10,
},
button: {
margin: 20,
padding: 10,
paddingLeft: 20,
paddingRight: 20,
backgroundColor: '#406E9F',
borderRadius: 9,
alignItems: 'center',
justifyContent: 'center',
},
buttonText: {
color: '#fff',
fontSize: 20,
fontWeight: 'bold',
},
});
結果會長這樣
其中 rowHasChanged
也是 ListView 必須的 function 之一,這裡我們用 (r1, r2) => r1 !== r2}
讓他可以簡單的判斷輸每個 ListItem 有無變化來更改 render 的內容。
有問題歡迎來 React Native Taiwan 問喔
創科資訊